package skcontroller

import (
	"Cgo/backend/models"
	"Cgo/common"
	"net/http"
	"strconv"

	"github.com/gin-gonic/gin"
)

func SkUserController(r *gin.RouterGroup) {
	r.POST("/updateUser", common.HandlerFunc(updateUserHandler))
	r.POST("/deleteUser", common.HandlerFunc(deleteUserHandler))
	r.POST("/addUser", common.HandlerFunc(addUserHandler))
	r.GET("/refreshData", common.HandlerFunc(refreshData))
}

type User struct {
	ID       int    `json:"id"`
	Name     string `json:"name"`
	Password string `json:"password"`
}

// @Summary 用户修改
// @Description 用户修改
// @Tags sk后台接口
// @Accept json
// @Produce json
// @Param name body string true "用户名"
// @Param newName body string true "新用户名"
// @Param password body string true "密码"
// @Success 200 {object} common.RT[string]
// @Router /backend/sk/user/updateUser [post]
// 修改用户信息
func updateUserHandler(ctx *gin.Context) common.Result {
	var requestData struct {
		Name        string `json:"name"`
		NewName     string `json:"newName"`
		NewPassword string `json:"newPassword"`
	}

	if err := ctx.BindJSON(&requestData); err != nil {
		ctx.JSON(http.StatusBadRequest, common.R.Fail(err.Error()))
		return common.R.Fail(err.Error()) // 返回错误信息
	}

	// 调用 UpdateUser 方法
	if err := UserDao.UpdateUser(requestData.Name, requestData.NewName, requestData.NewPassword); err != nil {
		ctx.JSON(http.StatusInternalServerError, common.R.Fail(err.Error()))
		return common.R.Fail(err.Error()) // 返回错误信息
	}

	ctx.JSON(http.StatusOK, common.R.Success(nil))
	return common.R.Success(nil) // 返回成功信息
}

// @Summary 用户删除
// @Description 用户删除
// @Tags sk后台接口
// @Accept json
// @Produce json
// @Param id query int true "用户id"
// @Success 200 {object} common.RT[string]
// @Router /backend/sk/user/deleteUser [post]
// 删除用户
func deleteUserHandler(ctx *gin.Context) common.Result {
	Id := ctx.Query("id")
	if Id == "" {
		return common.R.Fail("请输入要删除的用户ID")
	}

	// 将Id转换为整数
	IdInt, err := strconv.Atoi(Id)
	if err != nil {
		return common.R.Fail("用户ID格式错误")
	}

	// 调用用户书籍的函数
	err = UserDao.DeleteUser(IdInt)
	if err != nil {
		return common.R.Fail("删除用户失败")
	}

	return common.R.Success("删除用户成功")
}

// @Summary 用户添加
// @Description 用户添加
// @Tags sk后台接口
// @Accept json
// @Produce json
// @Param user body models.SkUser true "注册信息"
// @Success 200 {object} common.RT[string]
// @Router /backend/sk/user/addUser [post]
// 添加用户
func addUserHandler(ctx *gin.Context) common.Result {
	var user models.SkUser
	err := ctx.ShouldBindJSON(&user)
	if err != nil {
		return common.R.Fail("参数错误")
	}
	if user.Name == "" || user.Password == "" {
		return common.R.Fail("请输入正确的账号密码")
	}
	err = UserDao.AddUser(user.Id, user.Name, user.Password)
	if err != nil {
		return common.R.Fail("添加失败")
	}
	return common.R.Success("添加成功")
}

// @Summary 用户刷新
// @Description 用户刷新
// @Tags sk后台接口
// @Accept json
// @Produce json
// @Success 200 {object} common.RT[models.SkBook]
// @Router /backend/sk/user/refreshData [get]
// 刷新数据
func refreshData(ctx *gin.Context) common.Result {
	users, err := UserDao.GetUsers()
	if err != nil {
		return common.R.Fail("获取用户数据失败")
	}

	// 返回图书数据
	return common.R.Success(users)
}
